package org.example.coursemangementserver.server.service.interfac.admin;

import org.example.coursemangementserver.pojo.dto.AdminDeleteStudentSelectInfoDTO;
import org.example.coursemangementserver.pojo.dto.IDListDTO;
import org.example.coursemangementserver.pojo.dto.UserLoginDTO;
import org.example.coursemangementserver.pojo.dto.course.*;
import org.example.coursemangementserver.pojo.dto.course.CourseListQuery.GetCourseListDTO;
import org.example.coursemangementserver.pojo.dto.course.EnrollmentListQuery.GetEnrollmentListDTO;
import org.example.coursemangementserver.pojo.dto.course.StudentSelectRecordListQuery.GetStudentSelectRecordListDTO;
import org.example.coursemangementserver.pojo.dto.student.AddStudentInfoDTO;
import org.example.coursemangementserver.pojo.dto.student.EditStudentInfoDTO;
import org.example.coursemangementserver.pojo.dto.student.StudentListQuery.AdminDeleteStudentDTO;
import org.example.coursemangementserver.pojo.dto.student.StudentListQuery.AdminPassStudentDTO;
import org.example.coursemangementserver.pojo.dto.teacher.AddTeacherInfoDTO;
import org.example.coursemangementserver.pojo.dto.teacher.AdminDeleteTeacherDTO;
import org.example.coursemangementserver.pojo.dto.teacher.AdminPassTeacherDTO;
import org.example.coursemangementserver.pojo.dto.teacher.EditTeacherInfoDTO;
import org.example.coursemangementserver.pojo.vo.UserLoginVO;
import org.example.coursemangementserver.pojo.vo.course.CommentCourseStatistics.CommentCourseStatisticsVO;
import org.example.coursemangementserver.pojo.vo.course.CourseIdWithName.CourseIdWithNameListVO;
import org.example.coursemangementserver.pojo.vo.course.CourseList.CourseListVO;
import org.example.coursemangementserver.pojo.vo.course.EnrollmentList.EnrollmentListVO;
import org.example.coursemangementserver.pojo.vo.course.SelectCourseStatistics.SelectCourseStatisticsVO;
import org.example.coursemangementserver.pojo.vo.course.StudentSelectRecordList.StudentSelectRecordListVO;
import org.example.coursemangementserver.pojo.vo.course.TeacherCourseRatingStatistics.TeacherCourseRatingStatisticsVO;
import org.example.coursemangementserver.pojo.vo.teacher.TeacherIdWithName.TeacherIdWithNameListVO;

public interface AdminService {
    /**
     * 教务人员登录
     * @param userLoginDTO
     * @return
     */
    UserLoginVO login(UserLoginDTO userLoginDTO);

    /**
     * 根据条件查询获取所有课程列表
     */
    CourseListVO getCourseList(GetCourseListDTO getCourseListDTO);

    /**
     * 更新课程信息
     * @param updateCourseDTO
     * @return
     */
    void updateCourseByCourseId(UpdateCourseDTO updateCourseDTO);

    /**
     * 获取所有待选课程信息
     * @param getEnrollmentListDTO
     * @return
     */
    EnrollmentListVO getEnrollmentList(GetEnrollmentListDTO getEnrollmentListDTO);

    /**
     * 教务人员对某个课程结课
     * @param endCourseDTO
     */
    void adminEndCourse(EndCourseDTO endCourseDTO);

    /**
     * 教务人员查询所有学生的所有选课记录
     * @param getStudentSelectRecordListDTO
     * @return
     */
    StudentSelectRecordListVO getStudentSelectRecordList(GetStudentSelectRecordListDTO getStudentSelectRecordListDTO);

    /**
     * 获取课程评价的统计数据
     * @return
     */
    CommentCourseStatisticsVO getCourseCommentAverageRatings();

    /**
     * 获取选课统计
     * @return
     */
    SelectCourseStatisticsVO getSelectCourseStatisticsVO();

    /**
     * 教务人员获取教师课程评价统计数据
     * @return
     */
    TeacherCourseRatingStatisticsVO getTeacherCourseAverageRatings();

    void deleteCourseByCourseId(DeleteCourseDTO updateCourseDTO);

    void passTeacherInfo(AdminPassTeacherDTO adminPassTeacherDTO);

    void deleteTeacherInfo(AdminDeleteTeacherDTO adminDeleteTeacherDTO);

    void passStudentInfo(AdminPassStudentDTO adminPassTeacherDTO);

    void deleteStudentInfo(AdminDeleteStudentDTO adminDeleteTeacherDTO);

    void deleteStudentOnList(IDListDTO idListDTO);

    void deleteTeacherOnList(IDListDTO idListDTO);

    void deleteStudentSelectInfo(AdminDeleteStudentSelectInfoDTO adminDeleteStudentSelectInfoDTO);

    void addStudentInfo(AddStudentInfoDTO addStudentInfoDTO);

    void addTeacherInfo(AddTeacherInfoDTO addTeacherInfoDTO);

    void editStudentInfo(EditStudentInfoDTO editStudentInfoDTO);

    void editTeacherInfo(EditTeacherInfoDTO editTeacherInfoDTO);

    void addCourse(AddCourseDTO addCourseDTO);

    void deleteCurseOnList(IDListDTO idListDTO);

    void deleteStudentSelectInfoOnList(IDListDTO idListDTO);

    CourseIdWithNameListVO getCourseIdWithName();

    TeacherIdWithNameListVO getTeacherIdWithName();

    void addSelectCourse(AddSelectCourseDTO addSelectCourseDTO);

    void updateSelectCourse(UpdateSelectCourseDTO addSelectCourseDTO);

    void adminStopSelectCourse(AdminStopSelectCourseDTO adminStopSelectCourseDTO);
    void endEnrollmentOnList(IDListDTO idListDTO);
}
